package site.lyweb.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import site.lyweb.domain.dto.StuCourseRelation;
import site.lyweb.domain.po.StuCoursePo;
import site.lyweb.result.RestResult;
import site.lyweb.service.StuCourseRelationService;
import site.lyweb.utils.UUIDUtils;

import java.util.List;

/**
 * @Author 林瑶
 * @Description TODO
 * @Date 2024/6/20 1:54
 */
@CrossOrigin
@RestController
@Tag(name="学生课程关系模块")
@Slf4j
@RequestMapping("/stu_course")
public class StuCourseController {
    @Resource
    private StuCourseRelationService stuCourseRelationService;

    /**
     * 根据id查找学生课程关系表中信息(只查id形式的)
     */
    @Operation(summary = "根据id查找学生课程关系表中信息(只查id形式的)")
    @Parameters({
            @Parameter(name = "id",description = "id(主键)",in = ParameterIn.PATH)
    })
    @GetMapping("/relation/getById/{id}")
    public RestResult queryStuCourseRelationById(@PathVariable("id") String id){
        try {
            StuCourseRelation byId = stuCourseRelationService.getById(id);
            return RestResult.SUCCESS(byId);
        } catch (Exception e) {
            log.error("查找学生课程关系表中信息(只查id形式的)时发生异常: {}", e.getMessage());
            return RestResult.FAIL("查找学生课程关系表中信息(只查id形式的)时发生异常");
        }
    }

    /**
     * 根据id查找学生课程关系表中信息(查关联到的所有信息)
     */
    @Operation(summary = "根据id查找学生课程关系表中信息(查关联到的所有信息)")
    @Parameters({
            @Parameter(name = "id",description = "id(主键)",in = ParameterIn.PATH)
    })
    @GetMapping("/relation/getAllById/{id}")
    public RestResult queryAllStuCourseRelationById(@PathVariable("id") String id){
        try {
            StuCoursePo byId = stuCourseRelationService.getStuCourseById(id);
            return byId != null ? RestResult.SUCCESS(byId) : RestResult.FAIL("查学生课程关系表中关联到的所有信息失败！");
        } catch (Exception e) {
            log.error("查找学生课程关系表中信息(查关联到的所有信息)时发生异常: {}", e.getMessage());
            return RestResult.FAIL("查找学生课程关系表中信息(查关联到的所有信息)时发生异常");
        }
    }

    /**
     * List:根据学生id查找学生课程关系表中信息(查关联到的所有信息)
     */
    @Operation(summary = "List:根据学生id查找学生课程关系表中信息(查关联到的所有信息)")
    @Parameters({
            @Parameter(name = "stuId",description = "id(主键)",in = ParameterIn.PATH)
    })
    @GetMapping("/relation/getAllByStuId/{stuId}")
    public RestResult queryAllStuCourseRelationByStuId(@PathVariable("stuId") String stuId){
        try {
            List<StuCoursePo> byId = stuCourseRelationService.getStuCourseByStuId(stuId);
            return byId != null ? RestResult.SUCCESS(byId) : RestResult.FAIL("查学生课程关系表中关联到的所有信息失败!");
        } catch (Exception e) {
            log.error("根据学生id查找学生课程关系表中信息(查关联到的所有信息)时发生异常: {}", e.getMessage());
            return RestResult.FAIL("根据学生id查找学生课程关系表中信息(查关联到的所有信息)时发生异常");
        }
    }

    /**
     * List:根据课程id查找学生课程关系表中信息(查关联到的所有信息)
     */
    @Operation(summary = "List:根据课程id查找学生课程关系表中信息(查关联到的所有信息)")
    @Parameters({
            @Parameter(name = "courseId",description = "id(主键)",in = ParameterIn.PATH)
    })
    @GetMapping("/relation/getAllByCourseId/{courseId}")
    public RestResult queryAllStuCourseRelationByCourseId(@PathVariable("courseId") String courseId){
        try {
            List<StuCoursePo> byId = stuCourseRelationService.getStuCourseByCourseId(courseId);
            return byId != null ? RestResult.SUCCESS(byId) : RestResult.FAIL("查学生课程关系表中关联到的所有信息失败!");
        } catch (Exception e) {
            log.error("根据课程id查找学生课程关系表中信息(查关联到的所有信息)时发生异常: {}", e.getMessage());
            return RestResult.FAIL("根据课程id查找学生课程关系表中信息(查关联到的所有信息)时发生异常");
        }
    }
    /**
     * List:根据老师id查找学生课程关系表中信息(查关联到的所有信息)
     */
    @Operation(summary = "List:根据老师id查找学生课程关系表中信息(查关联到的所有信息)")
    @Parameters({
            @Parameter(name = "teacherId",description = "id(主键)",in = ParameterIn.PATH)
    })
    @GetMapping("/relation/getAllByTeacherId/{teacherId}")
    public RestResult queryAllStuCourseRelationByTeacherId(@PathVariable("teacherId") String teacherId){
        try {
            List<StuCoursePo> byId = stuCourseRelationService.getStuCourseByTeacherId(teacherId);
            return byId != null ? RestResult.SUCCESS(byId) : RestResult.FAIL("查老师课程关系表中关联到的所有信息失败!");
        } catch (Exception e) {
            log.error("根据老师id查找学生课程关系表中信息(查关联到的所有信息)时发生异常: {}", e.getMessage());
            return RestResult.FAIL("根据老师id查找学生课程关系表中信息(查关联到的所有信息)时发生异常");
        }
    }

    /**
     * 查找全部学生课程关系表中信息
     */
    @Operation(summary = "查找全部学生课程关系表中信息")
    @GetMapping("/relation/getAll")
    public RestResult queryStuCourseRelationAll(){
        try {
            return RestResult.SUCCESS(stuCourseRelationService.list());
        } catch (Exception e) {
            log.error("查找全部学生课程关系表中信息时发生异常: {}", e.getMessage());
            return RestResult.FAIL("查找全部学生课程关系表中信息时发生异常");
        }
    }

    /**
     * 根据id删除学生课程关系表中信息
     */
    @Operation(summary = "根据id删除学生课程关系表中信息")
    @Parameters({
            @Parameter(name = "id",description = "id(主键)",in = ParameterIn.PATH)
    })
    @PostMapping("/relation/del/{id}")
    public RestResult delStuCourseRelationById(@PathVariable("id") String id){
        try {
            return stuCourseRelationService.removeById(id) ? RestResult.SUCCESS("删除学生课程关系表中信息成功") : RestResult.FAIL("删除学生课程关系表中信息失败");
        } catch (Exception e) {
            log.error("根据id删除学生课程关系表中信息时发生异常: {}", e.getMessage());
            return RestResult.FAIL("根据id删除学生课程关系表中信息时发生异常");
        }
    }

    /**
     * 保存学生课程关系表中信息
     */
    @Operation(summary = "保存学生课程关系表中信息")
    @PostMapping("/relation/edit")
    @Parameters({
            @Parameter(name = "id",description = "id（主键）",in = ParameterIn.QUERY),
            @Parameter(name = "stuId",description = "学生id",in = ParameterIn.QUERY),
            @Parameter(name = "courseId",description = "课程id",in = ParameterIn.QUERY),
    })
    public RestResult editStuCourseRelation(StuCourseRelation relation){
        try {
            if (relation != null) {
                //有id：修改，无id:添加
                if (relation.getId() != null && !relation.getId().isEmpty()) {
                    return stuCourseRelationService.updateById(relation) ? RestResult.SUCCESS("修改成功：" + relation) : RestResult.FAIL();
                } else {
                    relation.setId(UUIDUtils.getUUID());
                    return stuCourseRelationService.save(relation) ? RestResult.SUCCESS("添加成功：" + relation) : RestResult.FAIL();
                }
            }
            return RestResult.FAIL("传入学生课程关系对象为空，保存失败");
        } catch (Exception e) {
            log.error("保存学生课程关系表中信息时发生异常: {}", e.getMessage());
            return RestResult.FAIL("保存学生课程关系表中信息时发生异常");
        }
    }

    //根据老师账号查询所有课程下学生的信息
    @Operation(summary = "根据老师账号查询所有课程下学生的信息")
    @Parameters({
            @Parameter(name = "id",description = "id(主键)",in = ParameterIn.PATH)
    })
    @PostMapping("/relation/queryCourseStuByTeaId/{id}")
    public RestResult queryCourseStuByTeaId(String id){
        try {
            return stuCourseRelationService.queryCourseStuByTeaId(id) ? RestResult.SUCCESS("根据老师账号查询所有课程下学生的信息成功") : RestResult.FAIL("根据老师账号查询所有课程下学生的信息失败");
        } catch (Exception e) {
            log.error("根据老师账号查询所有课程下学生的信息时发生异常: {}", e.getMessage());
            return RestResult.FAIL("根据老师账号查询所有课程下学生的信息发生异常");
        }
    }



}
